package jv.redis.datatype.string;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;

public class RedisStringNew {
	Jedis jedis;
	@Before
	public void initRedis(){
		jedis = new Jedis("redis://192.168.1.108:6379");
	}
	
	@After
	public void closeRedis(){
		//注意不要使用jedis.shutdown()，这样会把服务器停掉。。。
		jedis.close();
	}
	/**
	 * 连接单机设置并获取值
	 */
	@Test
	public void setString(){
		jedis.set("foo", "bar");
		String value = jedis.get("foo");
		System.out.println(value);
	}
	/**
	 * 连接集群设置并获取值
	 */
	@Test
	public void setStringCluster(){
		Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
		//Jedis Cluster will attempt to discover cluster nodes automatically
		jedisClusterNodes.add(new HostAndPort("192.168.1.108", 7379));
		JedisCluster jc = new JedisCluster(jedisClusterNodes);
		jc.set("foo", "bar");
		String value = jc.get("foo");
		System.out.println(value);
	}
	
	/**
	 * 字符串数据类型相关操作
	 */
	@Test
	public void StringOptions(){
		//设置值
		String r1 = jedis.set("goods:id", "1");
		System.out.println("r1="+r1);//返回值是添加是否成功的状态
		//获取值
		String r2 = jedis.get("goods:id");//返回值为key-value中的value
		System.out.println("r2="+r2);
		//删除值
		Long r3 = jedis.del("goods:id");
		System.out.println("r3="+r3);//返回值为删除元素个数
	}
	
	/**
	 * 字符串数据类型相关操作-扩展
	 */
	@Test
	public void StringOptionsExtends(){
		//新增十个商品，每个商品设置一个价格
		List<String> lGoodsId = new ArrayList<String>();
		for(int i=0;i<10;i++){
			//方式使数字型值自增1,除此以外redis还提供了指定长自增和自减的方法，详情可以查阅redis或者jedis api
			Long goodsId = jedis.incr("goods:id");	
			String key = "goods:"+goodsId+":price";
			lGoodsId.add(key);
			jedis.set(key, Integer.toString(100+i));
		}
		for(int i=0;i<lGoodsId.size();i++){
			System.out.println(lGoodsId.get(i)+"="+jedis.get(lGoodsId.get(i)));
		}
	}
}
